from PIL import Image
import os
from tqdm import tqdm  # 新增导入

def convert_images_to_webp(old_dir, new_dir):
    """
    将指定目录下的所有图片文件转换为WebP格式，并保存到新目录中。

    :param old_dir: 包含原始图片文件的目录路径
    :param new_dir: 保存转换后WebP文件的目录路径
    """
    # 如果新目录不存在，则创建它
    if not os.path.exists(new_dir):
        os.makedirs(new_dir)

    # 先统计总文件数用于进度条
    total_files = sum(
        len([f for f in files if f.lower().endswith(('.png', '.jpg', '.jpeg'))])
        for _, _, files in os.walk(old_dir)
    )

    # 使用tqdm包裹主循环
    with tqdm(total=total_files, desc="转换进度") as pbar:
        for root, dirs, files in os.walk(old_dir):
            for filename in files:
                old_file_path = os.path.join(root, filename)
                if os.path.isfile(old_file_path) and filename.lower().endswith(('.png', '.jpg', '.jpeg')):
                    try:
                        with Image.open(old_file_path) as img:
                            # 获取相对路径
                            relative_path = os.path.relpath(root, old_dir)
                            # 构建包含相对路径的新目录
                            new_sub_dir = os.path.join(new_dir, relative_path)
                            # 如果新的子目录不存在，则创建它
                            if not os.path.exists(new_sub_dir):
                                os.makedirs(new_sub_dir)
                            # 构建新文件的完整路径
                            new_file_path = os.path.join(new_sub_dir, filename)
                            # 保存为WebP格式
                            img.save(new_file_path, 'WebP')
                    except (OSError, Exception) as e:
                        print(f"跳过文件 {old_file_path}，原因: {e}")
                    finally:  # 确保进度条更新
                        pbar.update(1)

# 调用函数进行转换
old_directory = 'old'
new_directory = 'new'
convert_images_to_webp(old_directory, new_directory)
